package com.flute.framework.index;

import java.util.List;

import com.flute.framework.StandardDate;
import com.flute.framework.data.IIndexData;

/**
 * 索引分布参考index文件夹。
 * 
 * 
 * running文件夹为当前正在做的索引，ready为最新一份完备的索引。
 * 
 * 其他若干以时间为名的索引为备份索引
 * 
 * 
 * 支持索引回滚到一定时间。对于特定的时间，如果有备份则直接用备份；
 * 
 * 如果没有备份则需要从源数据中从新重建索引
 * 
 * 
 * 不支持更新的逆操作，因为如果索引需要回到特定时间的状态，则很有可能当前索引存在问题，
 * 
 * 而以当前索引为基础的逆更新不能保证索引的正确性。
 * 
 * @author Dave Yang
 * 
 */
public interface IIndexer {

	/**
	 * 设置索引数据源
	 * 
	 * @param indexData
	 *            索引数据源
	 */
	public void setIndexData(IIndexData indexData);

	/**
	 * 从特定时间点开始重建，特定时间点是给定的。
	 * 
	 * @param date
	 */
	public void rebuildFrom(StandardDate date);

	/**
	 * 判断改时间点是否为备份好的索引
	 * 
	 * @param date
	 */
	public List<StandardDate> getBackupDates();

	/**
	 * @return 所有可以恢复的时间点
	 */
	public List<StandardDate> getDataDates();

	/**
	 * 更新索引，以当前索引为基础，处理新的数据
	 */
	public void update();
	
	public String getIndexerName();
}